package com.example.demo.streamstudy;

import com.example.demo.setstudy.Student;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @Description SreamTeat4
 * @Author songchuanlong
 * @Date 2025-05-23
 */
public class SreamTeat4 {
    public static void main(String[] args) {
        List<Double> scores = new ArrayList<>();
        Collections.addAll(scores,88.5,100.0,60.0,99.0,9.5,99.6,25.0);
        List<Student>students=new ArrayList<>();
        Student s1=new Student("蜘蛛精",26,172.5);
        Student s2=new Student("蜘蛛精",26,172.5);
        Student s3=new Student("紫霞",23,167.6);
        Student s4=new Student("白晶晶",25,169.5);
        Student s5=new Student("牛魔王",35,183.3);
        Student s6=new Student("牛夫人",34,168.5);
        Collections.addAll(students,s1,s2,s3,s4,s5,s6);

        //需求1：请计算出身高超过168的学生有几人。
        System.out.println(students.stream().filter(s -> s.getHeight() > 168).distinct().count());
        //需求2：请找出身高最高的学生对象，并输出。  输出的是一个学生对象
        System.out.println(students.stream().max(((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight()))).get());
        //需求3：请找出身高最矮的学生对象，并输出。
        System.out.println(students.stream().min(((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight()))).get());
        //需求4：请找出身高超过170的学生对象，并放到一个新集合中去返回。    流只能收集一次（不能把收集方法总结下来，之后用于list集合和set集合，否则就会有问题 ）
        System.out.println("=====");
        List<Student> studentList = students.stream().filter(s -> s.getHeight() > 170).collect(Collectors.toList());
        System.out.println(studentList);
        //需求5：请找出身高超过170的学生对象，并把学生对象的名字和身高，存入到一个Mop集合返回。
        System.out.println("====");
        Map<String, Double> stringDoubleMap = students.stream().filter(s -> s.getHeight() > 170).distinct().collect(Collectors.toMap(s -> s.getName(), s -> s.getHeight()));
        System.out.println(stringDoubleMap);
        System.out.println("-----------");
        Student[] array = students.stream().filter(s -> s.getHeight() > 170).distinct().toArray(len->new Student[len]);
        System.out.println(Arrays.toString(array));
    }
}
